/**
 * Created by kenz on 2017/6/14.
 */
import Vue from 'vue'
import { AjaxPlugin, WechatPlugin, ConfirmPlugin } from 'vux'
Vue.use(AjaxPlugin)
Vue.use(ConfirmPlugin)
Vue.use(WechatPlugin)
export function checkTel( tel ) {
  let reg = /^1[3|4|5|7|8][0-9]\d{8}$/
  if(!reg.test(tel)){
    return false
  }
  return true
}

export function checkCarNum( value ) {
  let reg = /^[京津沪渝冀豫云辽黑湘皖鲁新苏浙赣鄂桂甘晋蒙陕吉闽贵粤青藏川宁琼使领A-Z]{1}[A-Z]{1}[A-Z0-9]{4}[A-Z0-9挂学警港澳]{1}$/
  if(!reg.test(value)){
    return false
  }
  return true
}


//转省编码
export function setProvinceCode(val) {
  return val.substring(0, 2) + '0000'
}
//转市编码
export function setCityCode(val) {
  return val.substring(0, 4) + '00'
}
//判断是不是微信内部打开的
export function isWechat() {
  const ua = navigator.userAgent.toLowerCase();//获取判断用的对象
  //如果是微信页面登录且openid不存在，则获取openid，准备支付调起js支付时直接使用
  return ua.match(/MicroMessenger/i) == "micromessenger"
}
//只允许输入正数
export function globalKeyUp(_this) {
  if (!_this.value.match(/^\d*?\.?\d{0,2}?$/)){
    if(_this.t_value === undefined){
      _this.t_value = '';
    }
    _this.value = _this.t_value;
  } else {
    _this.t_value = _this.value;
  }
  if (_this.value.match(/^(?:[\+\-]?\d+(?:\.\d+)?)?$/)){
    _this.o_value = _this.value;
  }
  return  _this.t_value;
}
//配置微信
export function getWechatConfig(path, uid, token) {
  Vue.http.post($config.host + '/api/Account/getrechargeGongZhongWxpayconf', qs.stringify({
    url: $config.wechatHost + '/?#' + path,
    uid,
    client: $config.client_type,
    device: $config.device_type,
    token
  })).then((res) => {
    const data = res.data
    console.log(res.data)
    Vue.wechat.config({
      debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: data.appId, // 必填，公众号的唯一标识
      timestamp: data.timestamp, // 必填，生成签名的时间戳
      nonceStr: data.nonceStr, // 必填，生成签名的随机串
      signature: data.signature,// 必填，签名，见附录1
      jsApiList: ['chooseWXPay', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareQZone'] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
    })
  })
}
export function getPublicWechatConfig(url) {
  Vue.http.post($config.host + '/api/Alipaycallback/getrechargeGongZhongWxpayconf', qs.stringify({
    url
  })).then((res) => {
    const data = res.data
    Vue.wechat.config({
      debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: data.appId, // 必填，公众号的唯一标识
      timestamp: data.timestamp, // 必填，生成签名的时间戳
      nonceStr: data.nonceStr, // 必填，生成签名的随机串
      signature: data.signature,// 必填，签名，见附录1
      jsApiList: ['chooseWXPay', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareQZone'] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
    })
  })
}
//获取标签的总接口
export function getTagPost(hostUrl, item, fn) {
  Vue.http.post(hostUrl, item).then((res) => {
    const { code, msg, data } = res.data
    if(code == 1 && data){
      fn(data, code)
    } else {
      fn(data, code)
      console.log(msg)
    }
  })
}
//删除自定义标签总借口
export function delTag(hostUrl, item, data, index, fn) {
  Vue.$vux.confirm.show({
    title: '<i class="icon icon-gantanhao"></i>',
    content: '您确定要删除吗?',
    confirmText: '删除',
    cancelText: '取消',
    onConfirm: () => {
      Vue.http.post(hostUrl, qs.stringify(item)).then((res) => {
        const { code } = res.data
        if(code == 1){
          data.splice(index, 1)
          fn(data)
        }
      })
    }
  })
}
//微信内部去支付
export function toPayWechat(money, data, successFn) {
  Vue.http.post($config.host + '/api/Account/rechargeGongZhongWxpay', qs.stringify({
    openid: window.localStorage.openid,
    money,
    uid: data.uid,
    token: data.token,
    client: $config.client_type,
    device: $config.device_type
  })).then((res) => {
    const datas = res.data.data
    Vue.wechat.chooseWXPay({
      timestamp: datas.timeStamp,
      nonceStr: datas.nonceStr,
      package: datas.package,
      signType: datas.signType,
      paySign: datas.paySign,
      success: (success) => {
        successFn(success)
      }
    })
  })
}
export function setObjectVal(data) {
  let newObj = {}
  for (let i in data) {
    newObj[i] = data[i]
  }
  return newObj
}
export function setArrayVal(data) {
  let newObj = []
  for (let i = 0; i < data.length; i++) {
    newObj.push(data[i])
  }
  return newObj
}
export function unixTimestamp(timer) {
  let timestamp2 = Date.parse(new Date(timer))
  timestamp2 = parseInt(timestamp2 / 1000)
  return timestamp2
}

export function removeByValue(arr, val) {
  for(let i=0; i< arr.length; i++) {
    if(arr[i] == val) {
      arr.splice(i, 1);
      break;
    }
  }
  return arr
}



export function validate(schema, values){
  for(field in schema) {
    if(schema[field].required) {
      if(!values[field]) {
        return false;
      }
    }
  }
  return true;
}


var vcity={ 11:"北京",12:"天津",13:"河北",14:"山西",15:"内蒙古",
  21:"辽宁",22:"吉林",23:"黑龙江",31:"上海",32:"江苏",
  33:"浙江",34:"安徽",35:"福建",36:"江西",37:"山东",41:"河南",
  42:"湖北",43:"湖南",44:"广东",45:"广西",46:"海南",50:"重庆",
  51:"四川",52:"贵州",53:"云南",54:"西藏",61:"陕西",62:"甘肃",
  63:"青海",64:"宁夏",65:"新疆",71:"台湾",81:"香港",82:"澳门",91:"国外"
};

export function checkCard(v)
{
  var card = v;
  var data = {
    msg: '您输入的身份证号码格式不正确',
    status: false
  };
  //是否为空
  if(card === '')
  {
    data.msg = '请输入身份证号码';
    return data;
  }
  //校验长度，类型
  if(isCardNo(card) === false)
  {
    return data;
  }
  //检查省份
  if(checkProvince(card) === false)
  {
    return data;
  }
  //校验生日
  if(checkBirthday(card) === false)
  {
    data.msg = '请输入身份证号码生日不正确';
    return data;
  }
  //检验位的检测
  if(checkParity(card) === false)
  {
    return data;
  }


  data.msg = '';
  data.status = true;
  return data;


//检查号码是否符合规范，包括长度，类型
  function isCardNo(card)
  {
    //身份证号码为15位或者18位，15位时全为数字，18位前17位为数字，最后一位是校验位，可能为数字或字符X
    var reg = /(^\d{15}$)|(^\d{17}(\d|X)$)/;
    if(reg.test(card) === false)
    {
      return false;
    }

    return true;
  };

//取身份证前两位,校验省份
  function checkProvince(card)
  {
    var province = card.substr(0,2);
    if(vcity[province] == undefined)
    {
      return false;
    }
    return true;
  };

//检查生日是否正确
  function checkBirthday(card)
  {
    var len = card.length;
    //身份证15位时，次序为省（3位）市（3位）年（2位）月（2位）日（2位）校验位（3位），皆为数字
    if(len == '15')
    {
      var re_fifteen = /^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/;
      var arr_data = card.match(re_fifteen);
      var year = arr_data[2];
      var month = arr_data[3];
      var day = arr_data[4];
      var birthday = new Date('19'+year+'/'+month+'/'+day);
      return verifyBirthday('19'+year,month,day,birthday);
    }
    //身份证18位时，次序为省（3位）市（3位）年（4位）月（2位）日（2位）校验位（4位），校验位末尾可能为X
    if(len == '18')
    {
      var re_eighteen = /^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/;
      var arr_data = card.match(re_eighteen);
      var year = arr_data[2];
      var month = arr_data[3];
      var day = arr_data[4];
      var birthday = new Date(year+'/'+month+'/'+day);
      return verifyBirthday(year,month,day,birthday);
    }
    return false;
  };

//校验日期
  function verifyBirthday(year,month,day,birthday)
  {
    var now = new Date();
    var now_year = now.getFullYear();
    //年月日是否合理
    if(birthday.getFullYear() == year && (birthday.getMonth() + 1) == month && birthday.getDate() == day)
    {
      //判断年份的范围（3岁到100岁之间)
      var time = now_year - year;
      if(time >= 3 && time <= 100)
      {
        return true;
      }
      return false;
    }
    return false;
  };

//校验位的检测
  function checkParity(card)
  {
    //15位转18位
    card = changeFivteenToEighteen(card);
    var len = card.length;
    if(len == '18')
    {
      var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
      var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
      var cardTemp = 0, i, valnum;
      for(i = 0; i < 17; i ++)
      {
        cardTemp += card.substr(i, 1) * arrInt[i];
      }
      valnum = arrCh[cardTemp % 11];
      if (valnum == card.substr(17, 1))
      {
        return true;
      }
      return false;
    }
    return false;
  };

//15位转18位身份证号
  function changeFivteenToEighteen(card)
  {
    if(card.length == '15')
    {
      var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
      var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
      var cardTemp = 0, i;
      card = card.substr(0, 6) + '19' + card.substr(6, card.length - 6);
      for(i = 0; i < 17; i ++)
      {
        cardTemp += card.substr(i, 1) * arrInt[i];
      }
      card += arrCh[cardTemp % 11];
      return card;
    }
    return card;
  };
};


